﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;


namespace AtlasPlantasMedicinales.Models
{
    public class ArticuloCientifico
    {
        public int ID { get; set; }

        [Required]
        public HttpPostedFileWrapper ImagenPath { get; set; }

        public string PathFotoPlanta { get; set; }

        [Required]
        public string NombreCientifico { get; set; }
        
        [Required]
        public string Familia { get; set; }
        
        [Required]
        public string Definicion { get; set; }
        
        [Required]
        public string Sinonimo { get; set; }
        
        [Required]
        public string NombreVernacular { get; set; }
        
        public IList<DistribucionGeografica> departamentos { get; set; }
        public IList<DistribucionGeografica> departamentosSelect { get; set; }
        public postedDepartamentos PostedDepartamentos { get; set; }
        
        [Required]
        public string Descripcion { get; set; }
        
        public PlantaDeInteres PlantaInteres { get; set; }
        
        [Required]
        public string PruebasIdentGeneral { get; set; }
        
        public PruebaDePureza PruebaPureza { get; set; }
        public EnsayoQuimico Ensayo { get; set; }
        public UsoMedicinal UsoMed { get; set; }
        public Farmacologia Farma { get; set; }
        
        [Required]
        public string Contraindicacion { get; set; }
        
        [Required]
        public string ListaPrecauciones { get; set; }
        
        [Required]
        public string ReaccionAdversa { get; set; }
        
        [Required]
        public string FormaDosificacion { get; set; }
        
        [Required]
        public string Posologia { get; set; }
        
        [Required]
        public string Referencias { get; set; }

        [Required]
        public bool comoBorrador { get; set; }
        
        [Required]       
        public bool Habilitado { get; set; }        
        public Usuario usuario { get; set; }

        public ArticuloCientifico() { 
            departamentos = new List<DistribucionGeografica>();
            departamentosSelect = new List<DistribucionGeografica>();
            PostedDepartamentos = new postedDepartamentos { IdsDepartamentos = new string[0] };
        }
    }

    public class CategoriasBuscarPlanta    {
        [Required]
        public int ID { get; set; }
        [Required]
        public string Categoria { get; set; }
        [Required]
        public bool IsSelected { get; set; }

        public string nombre { get; set; }
    }

    public class postedCategorias    
    {
        [Required]
        public string[] IdsCategorias { get; set; }
    }

    public class CategoriasRepository 
    {
        public static CategoriasBuscarPlanta Get(int id) {
            return GetAll().FirstOrDefault(x => x.ID.Equals(id));
        }

        public static IEnumerable<CategoriasBuscarPlanta> GetAll() 
        {
            List<CategoriasBuscarPlanta> categorias = new List<CategoriasBuscarPlanta>();            
            categorias.Add(new CategoriasBuscarPlanta { ID = 1, Categoria = "Nombre científico" , nombre = "NombreCientifico" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 2, Categoria = "Familia", nombre = "Familia" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 3, Categoria = "Definición", nombre = "Definicion" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 4, Categoria = "Sinónimo", nombre = "Sinonimo" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 5, Categoria = "Nombres vernaculares", nombre = "NombresVernaculares" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 6, Categoria = "Distribución geográfica", nombre = "DistribucionGeo" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 7, Categoria = "Descripción", nombre = "Descripcion" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 8, Categoria = "Apariencia general", nombre = "AparienciaGeneral" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 9, Categoria = "Propiedades organolépticas", nombre = "PropOrganolepticas" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 10, Categoria = "Características microscópicas", nombre = "CaracteristicasMicro" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 11, Categoria = "Material vegetal en polvo", nombre = "MaterialVegEnPolvo" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 12, Categoria = "Pruebas de identidad general", nombre = "PruebasIdentGeneral" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 13, Categoria = "Microbiológicas", nombre = "Microbiologicas" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 14, Categoria = "Materia orgánica extraña", nombre = "MateriaOrgExtrana" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 15, Categoria = "Cenizas totales", nombre = "CenizasTotales" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 16, Categoria = "Cenizas totales insolubles en ácido", nombre = "CenizasInsolEnAcido" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 17, Categoria = "Cenizas sulfatas", nombre = "CenizasSulfatas" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 18, Categoria = "Pérdida por secado", nombre = "PerdidaPorSecado" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 19, Categoria = "Residuos de pesticidas", nombre = "ResiduoDePesticidas" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 20, Categoria = "Metales pesados", nombre = "MetalesPesados" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 21, Categoria = "Residuos radiactivos", nombre = "ResiduosRadiactivos" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 22, Categoria = "Otras pruebas", nombre = "OtrasPruebasPureza" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 23, Categoria = "Metabolitos secundarios", nombre = "MetabolitoSecundario" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 24, Categoria = "Constituyentes químicos mayoritarios", nombre = "ConstQuimMay" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 25, Categoria = "Usos descritos en sist. tradicionales", nombre = "UsoSisTradicional" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 26, Categoria = "Usos descritos en sist. tradicionales no validado", nombre = "UsoSisTradicionalNoVal" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 27, Categoria = "Link", nombre = "Link" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 28, Categoria = "Link - Definición", nombre = "Definicion" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 29, Categoria = "Link - Descripción", nombre = "Descripcion" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 30, Categoria = "Link - Causas y síntomas", nombre = "CausaSintoma" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 31, Categoria = "Link - Diagnóstico", nombre = "Diagnostico" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 32, Categoria = "Link - Tratamiento", nombre = "Tratamiento" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 33, Categoria = "Link - Prevención", nombre = "Prevencion" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 34, Categoria = "Link - Esquema", nombre = "Esquema" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 35, Categoria = "Actividades farmacológicas", nombre = "ActividadFarmacologica" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 36, Categoria = "Actividades misceláneas", nombre = "ActividadMiscelanea" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 37, Categoria = "Farmacología clínica", nombre = "FarmacologiaClinica" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 38, Categoria = "Contraindicaciones", nombre = "Contraindicacion" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 39, Categoria = "Lista precauciones", nombre = "ListaPrecauciones" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 40, Categoria = "Reacciones adversas", nombre = "ReaccionAdversa" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 41, Categoria = "Forma de dosificación", nombre = "FormaDosificacion" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 42, Categoria = "Posología", nombre = "Posologia" });
            categorias.Add(new CategoriasBuscarPlanta { ID = 43, Categoria = "Referencias", nombre = "Referencias" });
            return categorias;
        }        
    }

    public class BuscarPlanta
    {
        public IList<CategoriasBuscarPlanta> categorias { get; set; }
        public IList<CategoriasBuscarPlanta> categoriasSelect { get; set; }
        public postedCategorias PostedCategorias { get; set; }

        [Required]
        public string porBuscarPlanta { get; set; }

        public BuscarPlanta() {
            categorias = new List<CategoriasBuscarPlanta>();
            categoriasSelect = new List<CategoriasBuscarPlanta>();
            PostedCategorias = new postedCategorias { IdsCategorias = new string[0] };
        }

    }

    public class DistribucionGeografica {
        [Required]
        public int ID { get; set; }
        [Required]
        public string Departamento { get; set; }
        [Required]
        public bool IsSelected { get; set; }
        [Required]
        public object Tags { get; set; }
    }

    public class postedDepartamentos {
        [Required]
        public string[] IdsDepartamentos { get; set; }
    }

    public static class DepartamentosRepository {

        public static DistribucionGeografica Get(int id) {
            return GetAll().FirstOrDefault(x => x.ID.Equals(id));
        }

        public static IEnumerable<DistribucionGeografica> GetAll()
        {
            List<DistribucionGeografica> departamentos = new List<DistribucionGeografica>();
            departamentos.Add(new DistribucionGeografica { ID = 1, Departamento = "Guatemala" });
            departamentos.Add(new DistribucionGeografica { ID = 2, Departamento = "Alta Verapaz" });
            departamentos.Add(new DistribucionGeografica { ID = 3, Departamento = "Baja Verapaz" });
            departamentos.Add(new DistribucionGeografica { ID = 4, Departamento = "Chimaltenago" });
            departamentos.Add(new DistribucionGeografica { ID = 5, Departamento = "Chiquimula" });
            departamentos.Add(new DistribucionGeografica { ID = 6, Departamento = "El Progreso" });
            departamentos.Add(new DistribucionGeografica { ID = 7, Departamento = "Escuintla" });
            departamentos.Add(new DistribucionGeografica { ID = 8, Departamento = "Huehuetenango" });
            departamentos.Add(new DistribucionGeografica { ID = 9, Departamento = "Izabal" });
            departamentos.Add(new DistribucionGeografica { ID = 10, Departamento = "Jalapa" });
            departamentos.Add(new DistribucionGeografica { ID = 11, Departamento = "Jutiapa" });
            departamentos.Add(new DistribucionGeografica { ID = 12, Departamento = "Petén" });
            departamentos.Add(new DistribucionGeografica { ID = 13, Departamento = "Quetzaltenango" });
            departamentos.Add(new DistribucionGeografica { ID = 14, Departamento = "Quiché" });
            departamentos.Add(new DistribucionGeografica { ID = 15, Departamento = "Retalhuleu" });
            departamentos.Add(new DistribucionGeografica { ID = 16, Departamento = "Sacatepéquez" });
            departamentos.Add(new DistribucionGeografica { ID = 17, Departamento = "San Marcos" });
            departamentos.Add(new DistribucionGeografica { ID = 18, Departamento = "Santa Rosa" });
            departamentos.Add(new DistribucionGeografica { ID = 19, Departamento = "Sololá" });
            departamentos.Add(new DistribucionGeografica { ID = 20, Departamento = "Suchitepéquez" });
            departamentos.Add(new DistribucionGeografica { ID = 21, Departamento = "Totonicapán" });
            departamentos.Add(new DistribucionGeografica { ID = 22, Departamento = "Zacapa" });
            return departamentos;
        }
    }

    public class PlantaDeInteres {
        [Required]
        public string AparienciaGeneral { get; set; }
        [Required]
        public string PropOrganolepticas { get; set; }
        [Required]
        public string CaracteristicasMicro { get; set; }
        [Required]
        public string MaterialVegEnPolvo { get; set; }
        public int ID { get; set; }

    }

    public class PruebaDePureza {
        [Required]
        public string Microbiologicas { get; set; }
        [Required]
        public string MateriaOrgExtrana { get; set; }
        [Required]
        public string CenizasTotales { get; set; }
        [Required]
        public string CenizasInsolEnAcido { get; set; }
        [Required]
        public string CenizasSulfatas { get; set; }
        [Required]
        public string PerdidaPorSecado { get; set; }
        [Required]
        public string ResiduosDePesticidas { get; set; }
        [Required]
        public string MetalesPesados { get; set; }
        [Required]
        public string ResiduosRadiactivos { get; set; }
        [Required]
        public string OtrasPruebasPureza { get; set; }
        public int ID { get; set; }
    }

    public class EnsayoQuimico {
        [Required]
        public string MetabolitoSecundario { get; set; }
        [Required]
        public string ConstQuimMay { get; set; }
        [Required]
        public HttpPostedFileWrapper PathImagen { get; set; }
        public string PathImagenEQ { get; set; }
        public int ID { get; set; }
    }

    public class UsoMedicinal {
        [Required]
        public string UsoSisTradicional { get; set; }
        [Required]
        public string UsoSisTradicionalNoVal { get; set; }
        public LinkPadecimiento LinkPad { get; set; }
        public int ID { get; set; }
    }

    public class LinkPadecimiento {
        [Required]
        public string Link { get; set; }
        [Required]
        public string Definicion { get; set; }
        [Required]
        public string Descripcion { get; set; }
        [Required]
        public string CausaSintoma { get; set; }
        [Required]
        public string Diagnostico { get; set; }
        [Required]
        public string Tratamiento { get; set; }
        [Required]
        public string Prevencion { get; set; }
        [Required]
        public string Esquema { get; set; }
        public int ID { get; set; }
    }

    public class Farmacologia {
        [Required]
        public string ActividadFarmacologica { get; set; }
        [Required]
        public string ActividadMiscelanea { get; set; }
        [Required]
        public string FarmacologiaClinica { get; set; }
        public int ID { get; set; }
    }
}